package com.servlet3.demo;

import com.servlet3.demo.config.RootConfig;
import com.servlet3.demo.config.WebConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * Servlet 3.0 规范要求，在容器启动时，扫描类路径下的 META-INF/services/javax.servlet.ServletContainerInitializer 文件，
 * 这个文件中的内容是实现了 ServletContainerInitializer 接口的类的全限定名，
 * 读取内容并实例化这些类，调用它们的 onStartup 方法。
 *
 * 从Servlet 3.0开始，实现 ServletContainerInitializer 接口的类 SpringServletContainerInitializer 将在容器启动的时候执行onStartup方法。
 * 在这个方法中，实例化所有实现了 WebApplicationInitializer 接口的类，并对它们排序，调用它们的 onStartup 方法。
 * SpringMVC的“零配置”就是基于这个特性。
 *
 * 代替 web.xml 配置
 */
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { RootConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class };
    }

    /**
     * identifies one or more paths that DispatcherServlet will be mapped to.<br>
     *  In this case, it’s mapped to /, indicating that it will be the application’s default servlet.<br>
     *   It will handle all requests coming into the application.
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}
